package com.lz.all;

/**
 * TemplateDemo..
 *
 * 模板模式
 * 要素
 *  1. 抽象类 AbstractClass
 *  2. 抽象方法
 *  3. 模板方法
 *
 * @author Lizhong
 * @date 2019/5/13
 */
public class TemplateDemo {
    public static void main(String[] args) {
        AbstractClass a = new A();
        a.work();

        AbstractClass b = new B();
        b.work();

    }
}

abstract class AbstractClass {
    /**
     * 模板方法
     */
    void work() {
        System.out.println("模板方法开始了");
        process01();
        System.out.println("模板方法结束了");
    }

    /**
     * 由子类实现
     */
     protected abstract void process01();
}

class A extends AbstractClass {
    @Override
    protected  void process01() {
        System.out.println("我是A");
    }
}

class B extends AbstractClass {
    @Override
    protected void process01() {
        System.out.println("我是B");
    }
}